package com.share.zabbix.response;

import com.alibaba.fastjson.JSON;

import cn.hutool.core.date.DateUtil;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
public class ZabbixResponseEvent implements Serializable {
    private static final long serialVersionUID = -4269275252486828993L;

    private String eventid;
    //事件是否被确认. 0-未确认 1-已确认
    private String acknowledged;
    private List<ZabbixResponseEventAck> acknowledges;
    private List<ZabbixResponseAlert> alerts;
    private List<ZabbixResponseHost> hosts;
    
    /**
     * source:事件的类型
	    0 - 由触发器创建的事件;
		1 - 由发现规则创建的事件;
		2 - 活动代理自动注册的事件;
		3 - 内部事件.
     */
    
    private String source;
    //事件的创建时间
    private String clock;
    private String name;
    private String description;
    private String severity;
    private String severityZh;
    private Long lastclock;
    
    /**
     * value:相关对象的状态.
		触发器事件的可能值:
		0 - 正常;
		1 - 异常.
		
		发现事件的可能值:
		0 - 主机或服务正常;
		1 - 主机或服务故障;
		2 - 主机或服务已发现;
		3 - 主机或服务丢失.
		
		内部事件的可能值:
		0 - “正常”状态;
		1 - “未知”或“不支持”状态.
		
		此参数不用于活动代理自动注册事件.
     */
    private String value;
    
    //相关对象的ID.
    private String objectid;
    
    /**
     * object:与事件相关的对象类型.
		触发器事件的可能值:
		0 - 触发器.
		
		发现事件的可能值:
		1 - 发现主机;
		2 - 发现服务.
		
		自动注册事件的可能值:
		3 - 自动注册的主机.
		
		内部事件的可能值:
		0 - 触发器;
		4 - 监控项;
		5 - 低级别发现(LLD)规则.
     */
    private String object;
    private String alertid;
    private String time;
  
    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
    
    public String getTime() {
    	time = DateUtil.format(new Date(Long.parseLong(clock) * 1000), "yyyy-MM-dd HH:mm:ss");
        return time;
    }
    
    public String getSeverityZh() {
    	switch(severity) {
    		case "0":
    			severityZh = "未分类";
    			break;
    		case "1":
    			severityZh =  "信息";
    			break;
    		case "2":
    			severityZh =  "警告";
    			break;
    		case "3":
    			severityZh =  "一般严重";
    			break;
    		case "4":
    			severityZh =  "严重";
    			break;
    		case "5":
    			severityZh =  "灾难";
    			break;
    	}
    	return severityZh;
    }
    
    public Long getLastclock() {
    	lastclock = Long.parseLong(clock) - System.currentTimeMillis();
    	return lastclock;
    }
}
